﻿using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net;
namespace WinnerCMS.Common.Network
{
    /// <summary>
    /// FTP 类
    /// </summary>
    public class FTP
    {
        /// <summary>
        /// 完整文件名
        /// </summary>
        public string FullFileName { get; set; }

        /// <summary>
        /// 服务器
        /// </summary>
        public string Host { get; set; }

        /// <summary>
        /// FTP用户名
        /// </summary>
        public string FtpUser { get; set; }

        /// <summary>
        /// FTP密码
        /// </summary>
        public string FtpPassword { get; set; }

        /// <summary>
        /// 上传
        /// </summary>
        /// <returns></returns>
        public bool UpFile()
        {
            try
            {
                FileInfo fileInf = new FileInfo(this.FullFileName);
                // 根据uri创建FtpWebRequest对象 
                FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(this.Host + fileInf.Name));
                // ftp用户名和密码 
                reqFTP.Credentials = new NetworkCredential(this.FtpUser, this.FtpPassword);
                // 默认为true，连接不会被关闭 
                // 在一个命令之后被执行 
                reqFTP.KeepAlive = false;
                // 指定执行什么命令 
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                // 指定数据传输类型 
                reqFTP.UseBinary = true;
                // 上传文件时通知服务器文件的大小 
                reqFTP.ContentLength = fileInf.Length;
                // 缓冲大小设置为2kb 
                const int buffLength = 2048;
                byte[] buff = new byte[buffLength];
                // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 
                FileStream fs = fileInf.OpenRead();
                // 把上传的文件写入流 
                Stream strm = reqFTP.GetRequestStream();
                // 每次读文件流的2kb 
                int contentLen = fs.Read(buff, 0, buffLength); 
                int startbye = 0;
                // 流内容没有结束 
                while (contentLen != 0)
                {
                    // 把内容从file stream 写入 upload stream 
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                    startbye += contentLen;
                }
                // 关闭两个流 
                strm.Close();
                fs.Close();
                return true;
            }
            catch
            {
                return false;
            }


        }

    }
}
